import { TMap } from '../map'
import { LngLatBounds } from '../entity/lngLat'
import { Rectangle, RectangleOptions } from '../covering/rectangle'

/**
 * 创建矩形工具时的属性对象
 */
export type RectangleToolOptions = RectangleOptions

/**
 * 矩形工具件工厂对象
 */
type RectangleToolEventFactory = {
    /**
     * 用户双击完成一次折线绘制时触发事件
     *
     * ---
     *
     * - 特殊参数说明：
     *
     * `currentBounds`：用户拉框选择的地理范围。
     *
     * `currentRectangle`：用户绘制的矩形图形对象。
     *
     * `allRectangles`：工具所有绘制的矩形图形对象
     */
    draw: (event: { type: 'draw', target: RectangleTool, currentBounds: Array<LngLatBounds>, currentRectangle: Rectangle, allRectangles: Array<Rectangle> }) => void;
}

/**
 * 矩形工具，用来实现在地图上选择一个矩形区域或绘制矩形的功能
 */
export interface RectangleTool {
    /**
     * 创建一个矩形工具
     *
     * @param map 地图对象
     *
     * @param opts 属性对象
     */
    new(map: TMap, opts?: RectangleToolOptions): RectangleTool;

    /**
     * 返回工具左右绘制的矩形
     */
    getRectangles: () => Array<Rectangle>;

    /**
     * 清除所有该控件在地图上绘制的矩形图形
     */
    clear: () => void;
    /**
     * 开启画矩形工具
     */
    open: () => boolean;
    /**
     * 关闭画矩形工具
     */
    close: () => void;

    /**
     * 添加事件监听函数
     */
    addEventListener: <Event extends keyof RectangleToolEventFactory>(event: Event, handler: RectangleToolEventFactory[Event]) => void;

    /**
     * 移除事件监听函数
     */
    removeEventListener: <Event extends keyof RectangleToolEventFactory>(event: Event, handler: RectangleToolEventFactory[Event]) => void
}
